
type idType = number | string

type valueType = number | string | boolean | null | Array<valueType> | any

/**
 * 工作簿：表的分组，
 */
export type ISheetNames = Array<string>

/**
 * 字段类型
 */
export interface IColumn {
  tableId: idType, // 表编号
  columnId: idType, // 字段编号
  colName: string, // 字段名称
  cnName: string, // 中文名称
  colType: string, // 字段类型，nvarchar、int 等
  colSize: number, // 大小
  defaultValue: valueType, // 默认值
  canNull: boolean, // 允许空
  controlTypeId: number, // 控件类型
  content: string // 字段说明
}

/**
 * 表的类型
 */
export interface ITable {
  tableID: idType, // 表编号
  tableName: string, // 表名
  cnName: string, // 中文名称
  content: string, // 表的说明
  cols: IColumn[] // 字段集合
}

/**
 * 工作簿里的表的集合
 */
export interface ISheets {
  [sheetName: string]: Array<ITable>
}

/**
 * 状态
 */
export interface IMetaDataState {
  sheetNames: ISheetNames,
  sheets: ISheets,
  tables: {
    [tableId: idType]: ITable
  },
  timeoutCol: NodeJS.Timeout,
  timeoutFind: NodeJS.Timeout,
  timeoutForm: NodeJS.Timeout,
  timeoutGrid: NodeJS.Timeout,
  current: {
    sheetName: string, // 当前选择的工作簿名称
    table: ITable, // 当前选择的表的信息，包括 字段集合
    col: IColumn // 当前选择的字段，一个字段
  }
}